package com.lihaozhe.restclient.controller;

import com.lihaozhe.restclient.dto.ProductDTO;
import com.lihaozhe.restclient.service.ProductService;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 订单控制器
 * 处理订单相关的HTTP请求
 * 演示如何通过RestClient调用其他服务
 *
 * @author 李昊哲
 * @version 1.0.0
 */
@RestController
@RequestMapping("/api/orders")
public class OrderController {
  private final ProductService productService;

  /**
   * 构造函数，依赖注入ProductService
   */
  public OrderController(ProductService productService) {
    this.productService = productService;
  }

  /**
   * 创建订单接口
   * POST /api/orders
   *
   * @param orderRequest 订单请求数据
   * @return 订单创建结果
   */
  @PostMapping
  public Map<String, Object> createOrder(@RequestBody Map<String, Object> orderRequest) {
    // 从请求中获取商品ID
    Long productId = Long.valueOf(orderRequest.get("productId").toString());
    Integer quantity = Integer.valueOf(orderRequest.get("quantity").toString());

    // 调用商品服务获取商品信息
    ProductDTO product = productService.getProductById(productId);

    // 模拟订单创建逻辑
    double totalAmount = product.getPrice() * quantity;

    // 返回订单创建结果
    return Map.of(
        "orderId", System.currentTimeMillis(),           // 生成模拟订单ID
        "productName", product.getName(),
        "quantity", quantity,
        "unitPrice", product.getPrice(),
        "totalAmount", totalAmount,
        "status", "created"
    );
  }

  /**
   * 获取订单商品详情
   * GET /api/orders/{orderId}/product
   *
   * @param orderId 订单ID
   * @return 商品信息
   */
  @GetMapping("/{orderId}/product")
  public ProductDTO getOrderProduct(@PathVariable("orderId") Long orderId) {
    // 模拟根据订单ID获取商品ID（实际应从数据库查询）
    Long productId = orderId % 3 + 1L; // 模拟商品ID 1,2,3

    // 调用商品服务获取商品详情
    return productService.getProductById(productId);
  }

  /**
   * 获取所有可用商品（用于下单前选择）
   * GET /api/orders/available-products
   *
   * @return 可用商品列表
   */
  @GetMapping("/available-products")
  public List<ProductDTO> getAvailableProducts() {
    // 调用商品服务获取所有商品
    return productService.getAllProducts();
  }

  /**
   * 健康检查端点
   * GET /api/orders/health
   *
   * @return 服务状态
   */
  @GetMapping("/health")
  public Map<String, String> health() {
    return Map.of("status", "UP", "service", "order-service");
  }
}
